#include<iostream>
#include<vector>
#include<string>
using namespace std;


class Solution {
    vector<vector<string>> ans;
    vector<string> tmpStrV;
    int len;
public:

    bool is_right_str(string& str, int left, int right)
    {
        while (left < right) {
            if (str[left] != str[right])
                return false;
            left++; right--;
        }
        return true;
    }

    void dfs(string& s, int i)
    {
        if (i >= len) {
            ans.push_back(tmpStrV);
            return;
        }
        for (int j = i; j < len; j++) {
            if (is_right_str(s, i, j)) {
                tmpStrV.push_back(s.substr(i, j - i + 1));
                cout << s.substr(i, j - i + 1) << endl;
                dfs(s, j + 1);
                tmpStrV.pop_back();
            }
        }
    }

    vector<vector<string>> partition(string s) {
        len = s.size();
        dfs(s, 0);
        return ans;
    }
};